From: Ray Strode Date: Mon, 22 Jul 2019 15:06:30 +0000 (-0400) Subject: iconGrid: Clear meta_later callback on destruction X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~839^2^2~146 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=1d60c4d9d47e5e97fba12974b837743dc124ef2a;p=gnome-shell.git iconGrid: Clear meta_later callback on destruction The IconGrid code sometimes sets up a callback to be invoked later right before being destroyed. This commit adds a destroy handler to cancel the callback. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/628 --- diff --git a/js/ui/iconGrid.js b/js/ui/iconGrid.js index 1dd79cc89..3f6064e95 100644 --- a/js/ui/iconGrid.js +++ b/js/ui/iconGrid.js @@ -206,6 +206,8 @@ var IconGrid = GObject.registerClass({ this.rightPadding = 0; this.leftPadding = 0; + this._updateIconSizesLaterId = 0; + this._items = []; this._clonesAnimating = []; // Pulled from CSS, but hardcode some defaults here @@ -223,6 +225,14 @@ var IconGrid = GObject.registerClass({ this.connect('actor-added', this._childAdded.bind(this)); this.connect('actor-removed', this._childRemoved.bind(this)); + this.connect('destroy', this._onDestroy.bind(this)); + } + + _onDestroy() { + if (this._updateIconSizesLaterId) { + Meta.later_remove (this._updateIconSizesLaterId); + this._updateIconSizesLaterId = 0; + } } _keyFocusIn(actor) { @@ -757,12 +767,14 @@ var IconGrid = GObject.registerClass({ this._updateSpacingForSize(availWidth, availHeight); } - Meta.later_add(Meta.LaterType.BEFORE_REDRAW, - this._updateIconSizes.bind(this)); + if (!this._updateIconSizesLaterId) + this._updateIconSizesLaterId = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, + this._updateIconSizes.bind(this)); } // Note that this is ICON_SIZE as used by BaseIcon, not elsewhere in IconGrid; it's a bit messed up _updateIconSizes() { + this._updateIconSizesLaterId = 0; let scale = Math.min(this._fixedHItemSize, this._fixedVItemSize) / Math.max(this._hItemSize, this._vItemSize); let newIconSize = Math.floor(ICON_SIZE * scale); for (let i in this._items) {